# -*- coding: utf-8 -*-
"""
通过配置文件设置全局变量

注意：
1. import配置文件时，不要from xxx import *, 而要import config.py 
2. 在config.py文件中，用set_xxxValue()和get_xxxValue来提供外部访问接口，这个好处是，可以让全局变量在每次调用的时候都能得到刷新 
3. 其他文件使用get_xxxValue()获取到全局变量的最新值

另外，对于global这个声明，他只是在同一个文件中有效，并不能跨文件，就是夸module.所以不要妄想通过global来控制不同文件间的共享变量。

修改记录：
2016-8-2 苏振裕，新建
"""
import logging
import os
import datetime

class g_var:
    '''需要定义全局变量的放在这里，最好定义一个初始值'''
    # 工作目录 
    work_path = r"E:\stock_py\stock_py"
    # 数据存放的本地地址
    stock_data_path = r"F:\stock_data"

    # 日志文件
    log_path = os.path.join(work_path, 'log')
    log_name = os.path.join(log_path, 'stock_数据处理.log')
    # 下面的log参数不需要设定，设定为None
    log = ''

    # 数据库连接参数
    user = 'hr'  # 用户名
    pwd = '123456'  # 密码
    ip = "127.0.0.1"  # 地址
    db = 'stock'  # 数据库实例名

    # 数据存放的本地地址
    push_data_path = os.path.join(stock_data_path, '每天推送数据')

    # 每天计算结果的备份存放目录（除了导入数据库，也在本地备份到csv）
    calc_result_path = os.path.join(stock_data_path, '每天计算结果')
    # 同时计算结果也放一份到work_path下，这样复制到办公司就很方便直接读取数据了
    calc_result_path2 = os.path.join(work_path, 'my_stock')

    # 记录每天推送数据入库的log文件
    data_into_db_log = '_overview-push-入库记录.log'

    # 存放指定股票代码的excel
    specified_code = os.path.join(work_path, 'my_stock', 'specified_code.xlsx')

    # 存放指定股票ema，coe数据的文件
    specified_code_ema = os.path.join(work_path, 'my_stock', 'specified_code_ema.csv')

    # 存放指定股票实时数据的文件
    specified_code_timely_data = os.path.join(work_path, 'my_stock', 'specified_code_timely_data.csv')

    # 买卖提示信息的备忘log文件
    buy_info_log = os.path.join(work_path, 'my_stock', 'log_buy_sale_info.log')


# 对于每个全局变量，都需要定义get_value和set_value接口

def get_log(log_name=g_var.log_name):
    '''设置log变量'''
    # 判断是否存在，判断是否大于5M，则备份重命名
    if os.path.exists(log_name):
        if os.path.getsize(log_name) / (1024 * 1024) > 3:
            add_date_to_file(log_name)
            print('日志文件大于3M,将备份')
    # 如果日志已经创建，则返回
    if g_var.log != '':
        return logging.getLogger('mylogger')
    # 创建日志
    logger = logging.getLogger('mylogger')
    logger.setLevel(logging.DEBUG)
    # 创建一个handler，用于写入日志文件
    file_handler = logging.FileHandler(log_name)
    file_handler.setLevel(logging.DEBUG)
    # 再创建一个handler，用于输出到控制台
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.DEBUG)
    # 定义handler的输出格式
    formatter = logging.Formatter('%(asctime)s  %(message)s')
    file_handler.setFormatter(formatter)
    console_handler.setFormatter(formatter)
    # 给logger添加handler
    logger.addHandler(file_handler)
    logger.addHandler(console_handler)
    # 设定全局变量log
    g_var.log = logger
    return logger


def get_db_conn_var():
    '''获取oracle连接参数'''
    user = g_var.user
    pwd = g_var.pwd
    ip = g_var.ip
    db = g_var.db
    return user, pwd, ip, db


def set_db_conn_var(user, pwd, ip, db):
    '''设置oracle连接参数'''
    g_var.user = user
    g_var.pwd = pwd
    g_var.ip = ip
    g_var.db = db


def add_date_to_file(file):
    """在file的名字前面增加系统日期，即重命名file。相当于备份原文件"""
    t = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
    path,name = os.path.split(file)
    name = t+'_'+name
    file2 = os.path.join(path,name)
    os.rename(file,file2)

def main():
    pass


if __name__ == '__main__':
    main()
